package com.datatrans.example;

import com.datatrans.config.TransferConfig;
import com.datatrans.service.DataTransferService;
import com.datatrans.exception.TransferException;

/**
 * 数据迁移工具使用示例
 */
public class DataTransferExample {
    
    public static void main(String[] args) {
        // 示例1: MySQL到PostgreSQL同名表数据迁移
        example1();
        
        // 示例2: 不同名表数据迁移
        example2();
        
        // 示例3: MSSQL使用示例
        example3();
    }
    
    /**
     * 示例1: MySQL到PostgreSQL同名表数据迁移
     */
    private static void example1() {
        System.out.println("开始执行示例1: MySQL到PostgreSQL同名表数据迁移");
        
        TransferConfig config = new TransferConfig();
        
        // 源数据库(MySQL)配置
        config.setSourceUrl("jdbc:mysql://localhost:3306/source_db?useSSL=false&serverTimezone=UTC");
        config.setSourceUsername("root");
        config.setSourcePassword("root_password");
        config.setSourceDbType(TransferConfig.DatabaseType.MYSQL);
        
        // 目标数据库(PostgreSQL)配置
        config.setTargetUrl("jdbc:postgresql://localhost:5432/target_db");
        config.setTargetUsername("postgres");
        config.setTargetPassword("postgres_password");
        config.setTargetDbType(TransferConfig.DatabaseType.POSTGRESQL);
        
        // 表配置（同名表）
        config.setSourceTable("users");
        // targetTable未设置，默认与sourceTable相同
        
        // 设置迁移模式为删除后拷贝
        config.setTransferMode(TransferConfig.TransferMode.DELETE_THEN_COPY);
        
        // 执行迁移
        DataTransferService service = new DataTransferService();
        try {
            service.transfer(config);
            System.out.println("示例1执行成功");
        } catch (TransferException e) {
            System.err.println("示例1执行失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 示例2: 不同名表数据迁移
     */
    private static void example2() {
        System.out.println("开始执行示例2: 不同名表数据迁移");
        
        TransferConfig config = new TransferConfig();
        
        // 源数据库(PostgreSQL)配置
        config.setSourceUrl("jdbc:postgresql://localhost:5432/source_db");
        config.setSourceUsername("postgres");
        config.setSourcePassword("postgres_password");
        config.setSourceDbType(TransferConfig.DatabaseType.POSTGRESQL);
        
        // 目标数据库(MySQL)配置
        config.setTargetUrl("jdbc:mysql://localhost:3306/target_db?useSSL=false&serverTimezone=UTC");
        config.setTargetUsername("root");
        config.setTargetPassword("root_password");
        config.setTargetDbType(TransferConfig.DatabaseType.MYSQL);
        
        // 表配置（不同名表）
        config.setSourceTable("employee");
        config.setTargetTable("staff");
        
        // 设置迁移模式为更新模式
        config.setTransferMode(TransferConfig.TransferMode.UPDATE);
        
        // 执行迁移
        DataTransferService service = new DataTransferService();
        try {
            service.transfer(config);
            System.out.println("示例2执行成功");
        } catch (TransferException e) {
            System.err.println("示例2执行失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 示例3: MSSQL使用示例
     */
    private static void example3() {
        System.out.println("开始执行示例3: MSSQL使用示例");
        
        TransferConfig config = new TransferConfig();
        
        // 源数据库(MSSQL)配置
        config.setSourceUrl("jdbc:sqlserver://localhost:1433;databaseName=source_db;encrypt=false");
        config.setSourceUsername("sa");
        config.setSourcePassword("sa_password");
        config.setSourceDbType(TransferConfig.DatabaseType.MSSQL);
        
        // 目标数据库(MySQL)配置
        config.setTargetUrl("jdbc:mysql://localhost:3306/target_db?useSSL=false&serverTimezone=UTC");
        config.setTargetUsername("root");
        config.setTargetPassword("root_password");
        config.setTargetDbType(TransferConfig.DatabaseType.MYSQL);
        
        // 表配置（同名表）
        config.setSourceTable("products");
        // targetTable未设置，默认与sourceTable相同
        
        // 设置迁移模式为删除后拷贝
        config.setTransferMode(TransferConfig.TransferMode.DELETE_THEN_COPY);
        
        // 执行迁移
        DataTransferService service = new DataTransferService();
        try {
            service.transfer(config);
            System.out.println("示例3执行成功");
        } catch (TransferException e) {
            System.err.println("示例3执行失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}